package dk.isten.andro.main;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;

import dk.isten.andro.R;

import android.app.Application;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.os.Environment;
import android.preference.PreferenceManager;
import android.util.Log;
import util.AarupbkXMLFeeds;
import util.Item;
import util.ReadWrite;
import util.XMLParsingKampprogram;

public class BaseApp extends Application {
	
	public static BaseApp instans;
	private static final int stamdataNr = 1;
	private static final String STAMDATA = "stamdata_v" + stamdataNr ;
	private static final String STAMDATAURL = "http://andro.isten.dk/stadionapp/" + STAMDATA + ".json";
//	private static final String STAMDATAURL = "http://javabog.dk:8080/ServerEksempel/stamdata_v10.json";

	/** Disse data kunne også være gemt i klassevariabler andetsteds,
	    det vigtige er at de initialiseret centralt, dvs. i onCreate() i denne klasse */
	public static SharedPreferences settings;
	public static util.Programdata data;
	public static util.Stamdata stamdata;
	public static util.Stamdata nyeStamdata;
	public SuperActivity sup;
	ArrayList<Item> kamp, AarupKamp;
	public static final String OPDATERINGSINTENT_NextGame = "OPDATERING_NextGame";
	


	@Override
	public void onCreate() {
		super.onCreate();
		Log.d("BaseAppAKt", "så er jeg i oncreate");
		
		settings = PreferenceManager.getDefaultSharedPreferences(this);
		// Er der nogle indstillinger der har global indflydelse på programmet
		// bør det opdages ved at lytte på prefs
		//prefs.registerOnSharedPreferenceChangeListener(this);
		
		OpdaterStilling baggrundstrådStilling = new OpdaterStilling();
		baggrundstrådStilling.execute();
		
		// Initialisering af hjælpeklasser, f.eks. mappen som en cache af filer
				// hentet over netværket behøver, er en fin ide at lægge her, for ellers
				// skal tjek for denne initialisering ske i alle de aktiviteter, services
				// og recievers der er afhængig af hjælpeklasserne
				util.FilCache.init(this.getCacheDir());
				
				SuperActivity sup = (SuperActivity) new SuperActivity();
				sup.setOrientation(true);

				File stamdatafil = new File(util.FilCache.findLokaltFilnavn(STAMDATAURL));
				if (stamdatafil.exists()) try {
					// Vi har en cachet stamdata. Brug den
					InputStream is = new FileInputStream(stamdatafil);
					stamdata = util.JsonIndlaesning.parseStamdata(util.JsonIndlaesning.læsInputStreamSomStreng(is));
					is.close();
				} catch (Exception e) {
					e.printStackTrace();
				}

				if (stamdata == null) try {
					// Indlæs fra raw this vi ikke har nogle cachede stamdata i prefs
					//InputStream is = getResources().openRawResource(R.raw.stamdata_v10);
					InputStream is = getResources().openRawResource(dk.isten.andro.R.raw.stamdata_v1);
					stamdata = util.JsonIndlaesning.parseStamdata(util.JsonIndlaesning.læsInputStreamSomStreng(is));
					is.close();
				} catch (Exception e) {
					// Det her er en kritisk fejl der bør få programmet til at crashe !
					throw new Error(e);
				}

				// Her kan initialisering af programdata ske
				data = new util.Programdata();

				// Nu kan tjek for en ny udgave af stamdata foregå - i en baggrundstråd
				TjekForNyeStamdata baggrundstråd = new TjekForNyeStamdata();
				baggrundstråd.execute();
//				OpdaterStartOpstilling opdaterBaggrund =new OpdaterStartOpstilling();
//				opdaterBaggrund.execute();

	}
	class TjekForNyeStamdata extends AsyncTask {
		private util.Stamdata nyeStamdata = null;

		/** Denne metode udføres af en baggrundstråd, sådan at hovedtråden ikke forsinkes */
		@Override
		protected Object doInBackground(Object... params) {
			File stamdatafil = new File(util.FilCache.findLokaltFilnavn(STAMDATAURL));
			long gammeltTidsstempel = stamdatafil.lastModified();
			try {
				util.FilCache.hentFil(STAMDATAURL, false);
			} catch (IOException ex) {
				ex.printStackTrace();
			}
			long nytTidsstempel = stamdatafil.lastModified();
			if (gammeltTidsstempel != nytTidsstempel) try {
				Log.d("stamdata_news", "STAMDATA HAR ÆNDRET SIG");
				InputStream is = new FileInputStream(stamdatafil);
				nyeStamdata = util.JsonIndlaesning.parseStamdata(util.JsonIndlaesning.læsInputStreamSomStreng(is));
				is.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
			return null;
		}
		@Override
		protected void onPostExecute(Object res) {
			if (nyeStamdata != null) {
				stamdata = nyeStamdata;
				// Her skal aktiviteterne opdateres.
				// Det gøres ved at sende et broadcast om at der er nye data
				Log.d("baggrundsakt", "kalder intent fra baggrunden");
				Intent i = new Intent(OPDATERINGSINTENT_Stamdata);
				sendBroadcast(i);
			Log.d("baggrundsakt", "kalder intent fra baggrunden");
					// Her skal view'et opdateres.
					// Det gøres ved at sende et broadcast om at der er nye data
			
				}
			
	    }
		/** Bruges til at sende broadcasts om nye stamdata */
		public static final String OPDATERINGSINTENT_Stamdata = "OPDATERING_Stamdata";
	}

//	En baggrundsprocessen (AsyncTask) til at opdatere stillingen fra nettet, parse den.Den skal i øjeblikket ikke bede hovedtråden om noget
	
	public class OpdaterStilling extends AsyncTask<Object, Object, Object>{

		@Override
		protected Object doInBackground(Object... params) {
			
			String filnavn = "stilling.xml";
	        String url = "http://andro.isten.dk/stadionapp/tmp/index.php?poolid=149819"; //URL skal hentes fra Stamdata 
	        
			ReadWrite.init(url, filnavn);
			System.out.println("stillingparse er kørt");
			
	        String kampfilnavn = "kampprogram.xml";
	        String kampurl = "http://andro.isten.dk/stadionapp/program.php?poolid=149819";
	        
	        ReadWrite.init(kampurl, kampfilnavn);
	        System.out.println("kampprogramparse er kørt");
	        

	     	File directory = new File(Environment.getExternalStorageDirectory(), "/StadionApp" );
	     	directory.mkdirs();
	    	File file = new File(directory, kampfilnavn );
	    	
	        XMLParsingKampprogram XMLP = new XMLParsingKampprogram();
	    	kamp = XMLP.KampprogramParser(file);
        	Log.d("fra kamp",kamp.size() + "");

        	
        	Item item = new Item();
        	item.Iterate(kamp);
        	AarupKamp = item.AarupKamp;
        	System.out.println(AarupKamp.toString());
        	     
	        AarupbkXMLFeeds feed = new AarupbkXMLFeeds();
			Log.d("baggrundsakt", "kalder intent fra ASYNCTASK");
			try {
				feed.getData(getResources().openRawResource(R.raw.rssnews), instans);
			} catch (IOException e) {
				e.printStackTrace();
			}
            return null;
	}
		@Override
		protected void onPostExecute(Object res) {
			
	
			Intent i1 = new Intent(OPDATERINGSINTENT_Stilling);
			sendBroadcast(i1);
			Intent i2 = new Intent(OPDATERINGSINTENT_NextGame);
			sendBroadcast(i2);

			
	    }
	
///** Bruges til at sende broadcasts om nye stamdata */
		public static final String OPDATERINGSINTENT_Stilling = "OPDATERING_Stilling";

	}
		
//		class OpdaterStartOpstilling extends AsyncTask{
//
//			@Override
//			protected Object doInBackground(Object... params) {
//			
//				Startopstilling_Akt.getStart();
//				Log.d("getStart fra BaseApp_AKt", "det må være lykkedes");
//	            return null;
//		}
		
		
//		@Override
//		protected void onPostExecute(Object res) {
//						
//			Intent i2 = new Intent(OPDATERINGSINTENT_NextGame);
//			sendBroadcast(i2);
//	    }
//
//		//** Bruges til at sende broadcasts om nye stamdata */
//		public static final String OPDATERINGSINTENT_NextGame = "OPDATERING_NextGame";

//	}
		}


    	
